/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package helper;

import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Properties;
import model.Criterio;
import model.Escala;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import util.PropertiesIO;

/**
 *
 * @author ST&T
 */
public class CriterioHelper {

    public static final String NOM_ELEMENTO = "Criterio";

    public static String getDocumento(Criterio objetoVO) {
        Element rootElement = new Element(NOM_ELEMENTO);
        rootElement.addContent(getElemento(objetoVO));
        XMLOutputter salida = new XMLOutputter(Format.getCompactFormat());
        return salida.outputString(new Document(rootElement));
    }

    public static String getDocumento(List coleccionVOs) {
        Element rootElement = new Element(NOM_ELEMENTO);
        for (int i = 0; i < coleccionVOs.size(); i++) {
            Criterio criterio = (Criterio) coleccionVOs.get(i);
            rootElement.addContent(getElemento(criterio));
        }
        XMLOutputter salida = new XMLOutputter(Format.getCompactFormat());
        return salida.outputString(new Document(rootElement));
    }

    public static Element getElemento(Criterio criterio) {
        Element elemento = new Element(NOM_ELEMENTO);
        
        if (criterio.getNombre() != null) {
            elemento.setAttribute("nombre", criterio.getNombre());
        }
        if (criterio.getDescripcion() != null) {
            elemento.setAttribute("descripcion", criterio.getDescripcion());
        }
        if (criterio.getUnidadMedida() != null) {
            elemento.setAttribute("unidadMedida", criterio.getUnidadMedida());
        }
        if (criterio.getOptimizacion() != null) {
            elemento.setAttribute("optimizacion", criterio.getOptimizacion());
        }
        if (criterio.getCuantitativoCualitativo() != null) {
            elemento.setAttribute("cuantitativoCualitativo", criterio.getCuantitativoCualitativo());
        }
        if (criterio.getEscalaMedida() != null) {
            elemento.setAttribute("escalaMedida", criterio.getEscalaMedida().getNombre());
        }
        return elemento;
    }

    public static Criterio getInstancia(Document documento) throws IOException {
        return getInstancia(documento.getRootElement().getChild(NOM_ELEMENTO));
    }

    public static Criterio getInstancia(Element elemento) throws IOException {
        
        Criterio criterio = new Criterio();
        
        if (elemento.getAttributeValue("nombre") != null) {
            criterio.setNombre(elemento.getAttributeValue("nombre"));
        }
        
        if (elemento.getAttributeValue("descripcion") != null) {
            criterio.setDescripcion(elemento.getAttributeValue("descripcion"));
        }
        
        if (elemento.getAttributeValue("unidadMedida") != null) {
            criterio.setUnidadMedida(elemento.getAttributeValue("unidadMedida"));
        }
        
        if (elemento.getAttributeValue("optimizacion") != null) {
            criterio.setOptimizacion(elemento.getAttributeValue("optimizacion"));
        }
        
        if (elemento.getAttributeValue("cuantitativoCualitativo") != null) {
            criterio.setCuantitativoCualitativo(elemento.getAttributeValue("cuantitativoCualitativo"));
        }
        
        if (elemento.getAttributeValue("escalaMedida") != null) {
            
            String key = elemento.getAttributeValue("escalaMedida");
            
            Escala tmp = new Escala(key, "");
            
            File prueba = new File("src/properties/escalas.properties");
            Properties pCC = PropertiesIO.read(prueba);
            tmp.setDescripcion(pCC.getProperty(key));
            criterio.setEscalaMedida(tmp);
        }
        
        return criterio;
    }

    public static List getInstancias(String cadenaXmlObjetos) throws Exception {
        try {
            SAXBuilder builder = new SAXBuilder();
            Document documento = builder.build(new StringReader(cadenaXmlObjetos));
            return getInstancias(documento);
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public static List getInstancias(Document documento) throws IOException {
        List alternativas = new ArrayList();
        List elementos = documento.getRootElement().getChildren(NOM_ELEMENTO);
        for (int i = 0; i < elementos.size(); i++) {
            Element elemento = (Element) elementos.get(i);
            alternativas.add(getInstancia(elemento));
        }
        return alternativas;
    }
}